package com.bluesky.light.user;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.bluesky.light.client.Cart;
import com.bluesky.light.order.OrderService;
import com.bluesky.light.staff.Staff;

/**
 * 用戶在醫療系統中所用到的功能
 * 
 * @author
 * 
 */
public class UserService {

	/**
	 * 管理UserService 所有方法的對象
	 */
	private static UserService mgr = null;

	/**
	 * 
	 */
	private UserService() {
	};

	/**
	 * 在數據庫存取用戶個人資料的對象
	 */
	private static UserDAO dao = new UserDAO();

	/**
	 * 要用到UserService時, 調用此方法創建一個UserService的實例
	 * 
	 * @return
	 */
	public static UserService getInstance() {
		if (mgr == null) {
			mgr = new UserService();
		}
		return mgr;
	};

	/**
	 * 把用戶的個人資料儲存到數據庫
	 * 
	 * @param u
	 */
	public void save(User u) {
		dao.add(u);
	}

	/**
	 * 根據用戶id刪除一個在數據庫中的用戶資料
	 * 
	 * @param id
	 * @return
	 */
	public boolean delete(int id) {
		return dao.delete(id);
	}

	/**
	 * 更新用戶的個人資料
	 * 
	 * @param u
	 */
	public void update(User u) {
		dao.update(u);
	}

	/**
	 * 修改用戶的密碼
	 * 
	 * @param u
	 */
	public void updatePwd(User u) {
		dao.updatePwd(u);
	}

	/**
	 * 調用用戶名和其密碼的驗證機制來判定用戶輸入的密碼是否正確
	 * 
	 * @param username
	 * @param pwd
	 * @return
	 */
	public User check(String username, String pwd) {
		return dao.check(username, pwd);
	}

	/**
	 * 獲取數據庫中儲存的用戶資料
	 * 
	 * @param users
	 * @return
	 */
	public int getUsers(List<User> users) {
		return dao.getUsers(users);
	}

	/**
	 * 根據用戶id 在數據庫查找用戶的個人資料
	 * 
	 * @param id
	 * @return
	 */
	public User loadById(int id) {
		return dao.loadById(id);
	}

	/**
	 * 根據用戶的身份證號在數據庫查找用戶的個人資料
	 * 
	 * @param idcard
	 * @return
	 */
	public User loadByIdcard(String idcard) {
		return dao.loadByIdcard(idcard);
	}

	/**
	 * 把用戶的就診狀態改為"已看診"
	 * 
	 * @param c
	 * @param u
	 * @param s
	 * @return
	 */
	public int acceptTreatment(Cart c, User u, Staff s) {
		return dao.acceptTreatment(c, u, s);
	}

	/**
	 * 用戶預約看診日期
	 * 
	 * @param u
	 * @param opdate
	 */
	public void bookTreatment(User u, Date opdate) {
		OrderService.getInstance().createTreatment(u, opdate);
	}

	/**
	 * 根據日期參數, 在數據庫中查找用戶
	 * 
	 * @param date
	 * @return
	 */
	public List<User> getUsers(Date date) {
		List<Integer> usersid = OrderService.getInstance().getUsersId(date);
		List<User> users = new ArrayList<User>();

		for (int i = 0; i < usersid.size(); i++) {
			User u = this.loadById(usersid.get(i));
			users.add(u);
		}
		return users;
	}

}
